1. Field
The present embodiments relate to techniques for safely executing native code modules. More specifically, the present embodiments relate to a method and system for safely executing native code modules using predicated control flow and store instructions.
2. Related Art
Easy access to computers and plentiful network bandwidth have facilitated sharing of information and applications. For instance, a user of a computing device (e.g., personal computer, mobile phone, personal digital assistant, etc.) may easily install and execute an application downloaded from a website or received from a friend as an email attachment. However, installing and executing such applications on a given computing device typically involves a level of trust that is granted on an all-or-nothing basis by the operating system of the computing device. Furthermore, bugs in the operating system may inadvertently allow applications to access resources As a result, some (e.g., native) applications may have full access to the operating system and/or resources of the computing device, while other (e.g., web) applications may have little to no direct access to the operating system and/or resources of the computing device.
Such coarse-grained application of trust may negatively impact the execution of all applications on the computing device. For example, native applications may produce unwanted side effects by modifying files on the computing device and/or engaging in computation or communication outside of the tasks or features requested by the user. On the other hand, web applications may execute one to two orders of magnitude more slowly than native applications and may provide limited functionality to the user.
Hence, what is needed is a technique for facilitating finer-grained application of trust to software executing on computing devices.